package com.zmn.plat.business.interfaces.area;

import java.util.List;

import com.zmn.common.dto.VtDTO;
import com.zmn.plat.common.dto.area.AreaDRO;
import com.zmn.plat.common.exception.PlatException;
import com.zmn.plat.model.entity.area.BaseArea;

/**
 * Creator: nowind
 *
 * @since 2018/7/12 16:15
 */
public interface BaseAreaBService {

    /**
     * 根据父区域ID获取所有子区域
     *
     * @param parentId
     * @return
     */
    List<VtDTO> getAreaList(Integer parentId) throws PlatException;

    /**
     * 查询区域，包括上级区域信息
     *
     * @param areaId
     *            区域ID
     * @return 全量区域信息
     */
    AreaDRO getAreaAndParent(Integer areaId);

    Integer updateByKey(BaseArea area);

    Integer insert(BaseArea area);

    /**
     * 根据地址获取区域信息
     * @param address
     * @since 2020/09/25 15:23
     * @return AreaDRO
     */
    AreaDRO getAreaByAddress(String address);

    /**
     * 根据父Id和用户ID取得所有子区域列表
     * @param parentId 上级区域ID
     * @param staffId  用户id
     * @return
     */
    List<VtDTO> listAreaVtByParentIdAndStaffIdNoCache(Integer parentId, Integer staffId);

    /**
     * 计算工程师到指定区域的距离
     * @param districtId 区/县ID
     * @param longitude  经度
     * @param latitude   纬度
     * @return
     */
    Double getDistanceByDistrictIdAndLongitudeAndLatitude(Integer districtId, Double longitude, Double latitude);

    /**
     *
     * 根据父Id和用户ID取得所有子区域列表
     * @param parentIdList 上级区域ID集合
     * @param staffId  用户id
     * @return
     */
    List<VtDTO> listAreaVtByParentIdListAndStaffId(List<Integer> parentIdList, Integer staffId, Integer level);
}
